package com.vhall.component.service.room;

import com.alibaba.fastjson.JSONObject;
import com.vhall.component.entity.audit.vo.AuditRecordResponseVO;
import com.vhall.component.entity.inav.vo.InavRoomGetRespVO;
import com.vhall.component.entity.room.RoomBaseInfoResponseVO;
import com.vhall.component.entity.room.dto.RoomWatermarkDTO;
import com.vhall.component.entity.room.vo.*;

import java.util.List;
import java.util.Map;

/**
 * @author guoxin.wang
 * @date 2021/7/12 17:30
 */
public interface RoomConsoleService {

    /**
     * 创建直播
     *
     * @param reqVO
     * @return
     */
    RoomRespVO create(CreateRoomNewVO reqVO);

    /**
     * 创建直播
     *
     * @param reqVO
     * @param imageBase64
     * @return
     */
    RoomRespVO create(CreateRoomVO reqVO, String imageBase64);


    /**
     * 查看房间数据
     *
     * @param reqVO request param
     * @return
     */
    RoomConsoleListRespVO list(Integer accountId, RoomConsoleListVO reqVO);

    /**
     * 合规检查 房间列表
     * @param accountId
     * @param reqVO
     * @return
     */
    RoomConsoleListRespVO complianceCheckList(Integer accountId, RoomConsoleListVO reqVO);

    List<InvestRefResponseVO> investRefList(Integer ilId);

    AppRoomListRespVO listForApp(Integer accountId, AppRoomListReqVO reqVO);

    /**
     * 获取supply信息
     *
     * @param reqVO
     * @return
     */
    RoomSupplyRespVO getCompetence(RoomLimitsVO reqVO);

    /**
     * 获取房间状态
     *
     * @param reqVO
     * @return
     */
    JSONObject getRoomStatus(RoomLimitsVO reqVO);

    /**
     * 查询房间信息
     */
    InavRoomGetRespVO getRoom(String roomId,Integer accountId);

    InavRoomGetRespVO getRoomByIlId(RoomAdminGetInfoVO reqVO);

    /**
     * 保存暖场视频
     *
     * @param reqVO
     * @return
     */
    Boolean saveWarm(WarmVO reqVO,Integer accountId);

    /**
     * 获取信息
     *
     * @param reqVO
     * @return
     */
    WarmRespVO getWarmInfo(WarmReqVO reqVO);

    /**
     * 更新房间信息
     *
     * @param reqVO
     * @return
     */
    Boolean update(CreateRoomNewVO reqVO);

    Boolean update(CreateRoomVO reqVO, String imageBase64, Boolean imageIsUpdate);


    /**
     * 查询推流地址
     *
     * @param reqVO
     * @return
     */
    JSONObject getStreamAddress(RoomLimitsVO reqVO);

    /**
     * 获取accesstoken
     *
     * @param reqVO
     * @return
     */
    JSONObject getAccessToken(RoomLimitsVO reqVO);

    /**
     * 获取是否在线
     *
     * @param reqVO
     * @return
     */
    Map<String, Object> getOnlineCheck(OnlineCheckVO reqVO);

    /**
     * 自定义菜单list
     *
     * @param reqVO
     * @return
     */
    JSONObject listCustomTag(CustomMenuVO reqVO);

    /**
     * 更新自定义菜单
     *
     * @param reqVO
     * @return
     */
    JSONObject editCustomTag(CustomMenuEditVO reqVO);

    /**
     * 增加live_mode
     *
     * @param reqVO
     * @return
     */
    Boolean addLiveMode(AddLiveModeVO reqVO);


    /**
     * 单条新增流地址
     *
     * @param reqVO
     * @return
     */
    Boolean addPushStream(PushStreamReqVO reqVO);

    /**
     * 批量新增流地址
     *
     * @param reqVO
     * @return
     */
    Boolean addPushStreamList(String reqVO);

    /**
     * 单条删除流地址
     *
     * @param id
     * @return
     */
    Boolean delPushStreamsById(Integer id);

    /**
     * 编辑流地址
     *
     * @param reqVO
     * @return
     */
    Boolean editPushStream(PushStreamReqVO reqVO);

    /**
     * 获取流地址详情
     *
     * @param id
     * @return
     */
    PushStreamSingleRspVO getPushStreamDeatil(Integer id);

    /**
     * 获取推流列表
     *
     * @param reqVO
     * @return PushStreamRspVO
     */
    List<PushStreamSingleRspVO> getPushStreamList(PushStreamListReqVO reqVO);

    /**
     * 单条推流
     *
     * @param id
     * @return
     */
    Boolean pushStreamStart(Integer id);


    /**
     * 批量推流
     *
     * @param reqVO
     * @return
     */
    Boolean pushStreamStartBatch(String reqVO);


    /**
     * 停止推流
     *
     * @param id
     * @return
     */
    Boolean pushStreamEnd(Integer id);


    /**
     * 推流统计
     *
     * @param roomId
     * @return
     */
    PushStreamStatisticsRspVO pushStreamStatistics(String roomId);

    /**
     * 设置房间水印
     *
     * @param roomWatermarkVO 参数
     * @return 是否设置成功
     */
    Boolean watermarkSetting(RoomWatermarkVO roomWatermarkVO);

    /**
     * 获取房间水印信息
     *
     * @param roomId 房间id
     * @return 房间水印信息
     */
    RoomWatermarkDTO getRoomWatermark(String roomId);

    Boolean submitForApproval(SubmitForApprovalVO vo);

    IntroductionDetailRspVO detail(IntroductionDetailReqVO introductionDetailReqVO);

    FirstFrameFromVideoRspVO getTheFirstFrameOfTheVideo(FirstFrameFromVideoVO reqVO);

    Boolean reservationStatusRoom(RoomOperationStatusVO vo);

    Boolean commentStatusRoom(RoomCommentStatusVO vo);

    Boolean savePullStreamUrl(RoomPullStreamVO vo);

    Boolean startPullStream(RoomPullStreamInfoVO vo);

    Boolean endPullStream(RoomPullStreamInfoVO vo);

    RoomPullStreamRespVO getPullStreamStatus(RoomPullStreamInfoVO vo);

    /**
     * 获取房间基本信息
     * @return
     */
    RoomBaseInfoResponseVO getRoomBaseInfo();

    /**
     * 房间审核
     * @param vo
     * @return
     */
    Boolean auditRoom(RoomAuditRequestVO vo);

    /**
     * 房间审核记录列表
     * @param vo
     * @return
     */
    List<AuditRecordResponseVO> roomAuditRecordList(RoomAuditRecordRequestVO vo);

    /**
     * 直播审核列表
     * @param reqVO
     * @return
     */
    RoomConsoleListRespVO roomAuditList(RoomAuditConsoleListVO reqVO);

    /**
     * console 端结束直播
     * @param vo
     * @return
     */
    Boolean consoleEndLive(ConsoleEndLiveRequestVO vo);
    Boolean inspectionRoom(RoomInspectionReqVO vo);

    List<RoomQrCodeListRspVO> qrCodeList(String roomId);

    Boolean genQrCode(RoomQrCodeListReqVO vo);

    Boolean delQrCode(Integer id);


    Boolean complianceCheck(Integer ilId, Integer auditStatus, String desc);

    /**
     * 获取付费金额列表
     * @return
     */
    List<LivePriceResponseVO> getLivePriceList();

    RoomConsoleListRespVO playbackCheck(RoomConsoleListVO reqVO);

    /**
     * 客户可见范围白名单上传
     * @param vo
     * @return
     */
    LimitScopeWhiteListUploadResponseVO limitScopeWhiteListUpload(LimitScopeWhiteListUploadRequestVO vo);
    Boolean revokeReview(Integer ilId);

    /**
     * 设置房间的标记无需回放状态
     * @param vo
     * @return
     */
    LiveNotNeedPlayBackResponseVO saveLiveNotNeedPlayBack(SaveLiveNotNeedPlayBackRequestVO vo);

    /**
     * 获取房间的标记无需回放状态
     * @param vo
     * @return
     */
    LiveNotNeedPlayBackResponseVO getLiveNotNeedPlayBack(RoomsBaseRequestVO vo);
}
